package com.cyl.manager.vip.service;

import java.math.BigDecimal;
import java.util.List;

import com.cyl.h5.domain.dto.PayNotifyMessageDTO;
import com.cyl.manager.vip.domain.entity.VipOrder;

/**
 * VIP订单Service接口
 *
 * @author system
 */
public interface IVipOrderService {
    /**
     * 查询VIP订单
     *
     * @param id VIP订单主键
     * @return VIP订单
     */
    VipOrder selectVipOrderById(Long id);

    /**
     * 查询VIP订单列表
     *
     * @param vipOrder VIP订单
     * @return VIP订单集合
     */
    List<VipOrder> selectVipOrderList(VipOrder vipOrder);

    /**
     * 新增VIP订单
     *
     * @param vipOrder VIP订单
     * @return 结果
     */
    int insertVipOrder(VipOrder vipOrder);

    /**
     * 修改VIP订单
     *
     * @param vipOrder VIP订单
     * @return 结果
     */
    int updateVipOrder(VipOrder vipOrder);

    /**
     * 批量删除VIP订单
     *
     * @param ids 需要删除的VIP订单主键集合
     * @return 结果
     */
    int deleteVipOrderByIds(Long[] ids);

    /**
     * 删除VIP订单信息
     *
     * @param id VIP订单主键
     * @return 结果
     */
    int deleteVipOrderById(Long id);

    /**
     * 根据订单号查询VIP订单
     *
     * @param orderSn 订单号
     * @return VIP订单
     */
    VipOrder selectVipOrderByOrderSn(String orderSn);

    /**
     * 根据用户ID查询VIP订单列表
     *
     * @param userId 用户ID
     * @return VIP订单集合
     */
    List<VipOrder> selectVipOrderListByUserId(Long userId);

    /**
     * 创建VIP支付订单
     *
     * @param userId 用户ID
     * @param rechargeDataId VIP配置ID
     * @param vipDays VIP天数
     * @param amount 订单金额
     * @param payAmount 实付金额
     * @param payType 支付方式
     * @param isAutoRenew 是否自动续费
     * @return VIP订单
     */
    VipOrder createVipOrder(Long userId, Long rechargeDataId, Integer vipDays,
                            BigDecimal amount, BigDecimal payAmount, Integer payType, Boolean isAutoRenew);

    /**
     * 支付成功回调处理
     *
     * @param messageDTO 支付回调消息对象
     * @return 结果
     */
    boolean paySuccessCallback(PayNotifyMessageDTO messageDTO);

    /**
     * 取消订单
     *
     * @param orderSn 订单号
     * @return 结果
     */
    boolean cancelOrder(String orderSn);

    /**
     * VIP订单支付
     *
     * @param vipPayForm 支付表单
     * @return 支付结果
     */
    com.cyl.h5.domain.vo.VipPayVO vipOrderPay(com.cyl.h5.domain.form.VipPayForm vipPayForm);
}
